Отслеживание изменения отбора в динамическом списке

В табличном поле не предусмотрено специальных событий, позволяющих отследить установку, изменение или отключение отбора в динамическом списке. Однако, в некоторых случаях может потребоваться контролировать изменение отбора в связанном с табличным полем динамическом списке. Для решения данной задачи предназначен метод ПодключитьОбработчикИзмененияДанных формы. Данный метод имеет три параметра: ИмяДанных, ИмяПроцедуры и ОтслеживатьПодчиненныеДанные.

Параметр ИмяДанных указывает строку - путь к данным, изменение которых необходимо отслеживать. Для отслеживания любых изменений отбора данный параметр должен содержать строку, указывающую путь к свойству Отбор связанного с табличным полем динамического списка. Если требуется отслеживать изменение только определенного элемента отбора, то данный параметр должен содержать путь к требуемому элементу отбора.

Параметр ИмяПроцедуры указывает имя процедуры, подключаемой в качестве обработчика изменения данных. Важно отметить, что данная процедура должна иметь один параметр - путь к данным, в который при вызове обработчика будет передана строка - путь к измененным данным.

Параметр ОтслеживатьПодчиненныеДанные указывает на необходимость вызова процедуры - обработчика при изменении данных, подчиненных заданным в параметре ИмяДанных. Для отслеживания любых изменений отбора данный параметр должен иметь значение Истина. Если требуется отслеживать только изменение определенного элемента отбора, то данный параметр должен иметь значение Ложь.

Поясним использование данного метода на следующем примере. Пусть существует форма списка расходных накладных. В форме расположено табличное поле, отображающее список расходных накладных. Требуется отображать в нижней части формы установленный в текущий момент отбор.

Для отображения установленного отбора используем элемент управления типа Надпись. В форме списка документов данный элемент управления имеет имя СтрокаОтбора.

Для отслеживания изменения отбора в списке расходных накладных подключим обработчик изменения данных. Для этого используем событие ПриОткрытии() формы:

Копировать в буфер обмена
Процедура ПриОткрытии()

    // Подключить обработчик изменения отбора в списке документов.
    ПодключитьОбработчикИзмененияДанных("ДокументСписок.Отбор", "ДокументСписокОтборПриИзмененииДанных", Истина);
    
КонецПроцедуры

В процедуре - обработчике изменения отбора сформируем строку, представляющую установленный в текущий момент отбор.

Копировать в буфер обмена
Процедура ДокументСписокОтборПриИзмененииДанных(ПутьКДанным)

    // Формирование строки отбора
    СтрокаОтбора = "";
    
    Для Каждого ЭлементОтбора Из ДокументСписок.Отбор Цикл
        Если ЭлементОтбора.Использование Тогда
            // Каждый элемент отбора отделяем символом ';'
            Если СтрокаОтбора <> "" Тогда
                СтрокаОтбора = СтрокаОтбора + "; ";
            КонецЕсли;
            
            // Добавляем имя элемента отбора
            СтрокаОтбора = СтрокаОтбора + Строка(ЭлементОтбора);
        КонецЕсли;
    КонецЦикла;
    
    ЭлементыФормы.СтрокаОтбора.Значение = СтрокаОтбора;
    
КонецПроцедуры